package com.tdam2011.grupo05.com;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.Context;
import android.os.Handler;
import android.util.Log;

import com.tdam2011.grupo05.entidades.Contacto;
import com.tdam2011.grupo05.entidades.DatabaseHelper;
import com.tdam2011.grupo05.entidades.Mensaje;
import com.tdam2011.grupo05.ui.activities.ChatActivity;
import com.tdam2011.grupo05.ui.activities.InicioActivity;

public class MensajeService {

	private static final String TAG = "ServicioConexion";
	private final Handler handler;
	private Conexion conexionThread;
	private boolean activo;
	private Context context;
	private DatabaseHelper helper;

	public MensajeService(boolean activo, Context context, Handler handler) {
		this.context = context;
		this.activo = activo;
		this.handler = handler;
		helper = new DatabaseHelper(this.context);

	}

	public synchronized void setActivo(boolean activo) {
		this.activo = activo;
	}

	public synchronized void start() {

		Log.i(TAG, "conexion start");

		conexionThread = new Conexion();
		conexionThread.start();
	}

	public synchronized void stop() {

		Log.i(TAG, "conexion stop");

		if (conexionThread != null) {
			try {
				conexionThread.join(1500);

				conexionThread = null;

			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void enviarMensaje(Mensaje mensaje) {
		conexionThread.escribirMensaje(mensaje);
	}

	private class Conexion extends Thread {

		MensajeParser mensajeParser;

		@Override
		public void run() {

			while (true) {
				try {
					if (activo) {
						mensajeParser = new MensajeParser();
						mensajeParser.consultarMensaje(InicioActivity.USUARIO,
								InicioActivity.PASSWORD);

						Object respuesta = mensajeParser.respuesta();
						if (respuesta instanceof Mensaje) {
							
							Mensaje mensaje = (Mensaje) respuesta;
							Contacto contacto = helper.getContacto(mensaje.getReceptor().getNombre());
							
							mensaje.setReceptor(contacto);
							mensaje.setTipoMensaje(Mensaje.TIPO_MENSAJE_ENTRANTE);
							
							helper.insertMensaje(mensaje);
							
							handler.obtainMessage(ChatActivity.LEER_MENSAJE,
									-1, -1, mensaje).sendToTarget();
						} else {

						}

						Thread.sleep(2000);

					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}

		public void escribirMensaje(Mensaje mensaje) {
			try {
				mensajeParser = new MensajeParser();

				mensajeParser.enviarMensaje(mensaje, InicioActivity.USUARIO,
						InicioActivity.PASSWORD);

				String respuesta = (String) mensajeParser.respuesta();
				if (respuesta.equals(MensajeParser.SUCCESS_RESULT))
					mensaje.setEstado(true);
				else {
					if (respuesta.equals(MensajeParser.ERROR_RESULT))
						mensaje.setEstado(false);
				}
				
				mensaje.setTipoMensaje(Mensaje.TIPO_MENSAJE_SALIENTE);
				mensaje.setFecha(getTimeStamp());
				
				helper.insertMensaje(mensaje);
				
				handler.obtainMessage(ChatActivity.ENVIAR_MENSAJE, -1, -1,
						mensaje).sendToTarget();

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		public String getTimeStamp (){
			SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
			String timestamp = formatter.format(new Date());
			return timestamp;
		}

	}

}
